#!/bin/bash
# 脚本功能：展示两数累加的不同赋值方式及结果输出
# 兼容 Bash 1.x+ 版本（覆盖旧式/新式语法）

# -------------------------- 步骤1：定义原始变量 --------------------------
num1=15  # 第一个加数
num2=27  # 第二个加数
echo "=== 原始变量：num1=$num1，num2=$num2 ==="
echo

# -------------------------- 方式1：POSIX标准算术扩展 $(( ))（推荐） --------------------------
# 最通用、跨Shell兼容，支持变量省略$
sum1=$((num1 + num2))
echo "方式1：POSIX标准算术扩展 \$(( ))"
echo "  赋值语句：sum1=\$((num1 + num2))"
echo "  结果：sum1=$sum1"
echo

# -------------------------- 方式2：Bash旧式算术扩展 $[ ]（兼容旧脚本） --------------------------
# Bash专属，功能与$(( ))完全等价，非POSIX标准
sum2=$[num1 + num2]
echo "方式2：Bash旧式算术扩展 \$[ ]"
echo "  赋值语句：sum2=\$[num1 + num2]"
echo "  结果：sum2=$sum2"
echo

# -------------------------- 方式3：算术复合命令 (( )) 赋值 --------------------------
# 不带$，直接执行运算并赋值（适合流程控制中嵌入运算）
((sum3 = num1 + num2))
echo "方式3：算术复合命令 (( )) 直接赋值"
echo "  赋值语句：((sum3 = num1 + num2))"
echo "  结果：sum3=$sum3"
echo

# -------------------------- 方式4：let 命令赋值（简洁旧式用法） --------------------------
# Bash内置命令，支持算术表达式，变量可省略$
let sum4=num1+num2  # 空格可选（let sum4=num1 + num2 也合法）
echo "方式4：let 命令赋值"
echo "  赋值语句：let sum4=num1+num2"
echo "  结果：sum4=$sum4"
echo

# -------------------------- 方式5：expr 命令（兼容最旧Shell，如sh） --------------------------
# 早期Shell无算术扩展时的用法，需注意空格和变量$
sum5=$(expr $num1 + $num2)  # 必须加空格，且变量需带$
echo "方式5：expr 命令（兼容旧式sh）"
echo "  赋值语句：sum5=\$(expr \$num1 + \$num2)"
echo "  结果：sum5=$sum5"
echo

# -------------------------- 方式6：bc 命令（支持浮点数累加，扩展用法） --------------------------
# 处理小数累加（前面5种方式仅支持整数），需用管道传递表达式
num1_float=12.3
num2_float=45.6
sum6=$(echo "$num1_float + $num2_float" | bc)
echo "方式6：bc 命令（支持浮点数累加）"
echo "  原始变量：num1_float=$num1_float，num2_float=$num2_float"
echo "  赋值语句：sum6=\$(echo \"\$num1_float + \$num2_float\" | bc)"
echo "  结果：sum6=$sum6"
echo

# -------------------------- 验证所有结果一致性 --------------------------
echo "=== 结果验证 ==="
# 用算术复合命令判断所有整数结果是否相等
if ((sum1 == sum2 && sum2 == sum3 && sum3 == sum4 && sum4 == sum5)); then
    echo "✅ 所有整数累加结果一致！"
else
    echo "❌ 整数累加结果存在差异！"
fi
echo "✅ 浮点数累加结果：sum6=$sum6"
